package cn.yinyu.queue.module.ecg.service.devrent;

import cn.yinyu.queue.framework.common.pojo.CommonResult;
import cn.yinyu.queue.module.ecg.controller.admin.devrent.vo.*;
import cn.yinyu.queue.module.ecg.dal.dataobject.devrent.DevRentDO;
import cn.yinyu.queue.framework.common.pojo.PageResult;

import javax.validation.Valid;

/**
 * 装机拆机 Service 接口
 *
 * @author 垠域源码
 */
public interface DevRentService {

    /**
     * 装机登记
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    CommonResult<Long> registerOperation(@Valid DevRentSaveReqVO createReqVO);

    /**
     * 常规检查 完成
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    CommonResult<Long> routineFinishOperation(@Valid RoutineFinishReqVO createReqVO);

    /**
     * 设备准备
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    CommonResult<Long> readyOperation(@Valid DevRentSaveReqVO createReqVO);

    /**
     * 装机
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    CommonResult<Long> installOperation(@Valid DevRentSaveReqVO createReqVO);

    /**
     * 拆机
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long dismantleOperation(@Valid DevRentSaveReqVO createReqVO);

    /**
     * 数据录入
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long dataEntryOperation(@Valid DevRentSaveReqVO createReqVO);


    /**
     * 常规检查 取消
     *
     * @param cancelReqVO 创建信息
     * @return 编号
     */
    CommonResult<Long> cancelRoutineOperation(@Valid DevCancelReqVO cancelReqVO);

    /**
     * 取消领用
     *
     * @param cancelReqVO 创建信息
     * @return 编号
     */
    CommonResult<Long> cancelReadyOperation(@Valid DevCancelReqVO cancelReqVO);

    /**
     * 取消装机
     *
     * @param cancelReqVO 创建信息
     * @return 编号
     */
    CommonResult<Long> cancelInstallOperation(@Valid DevCancelReqVO cancelReqVO);

    /**
     * 遗失
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    CommonResult<Long> dismantleExceptionOperation(@Valid DevRentSaveReqVO createReqVO);

    /**
     * 创建装机拆机
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createDevRent(@Valid DevRentSaveReqVO createReqVO);

    /**
     * 更新装机拆机
     *
     * @param updateReqVO 更新信息
     */
    void updateDevRent(@Valid DevRentSaveReqVO updateReqVO);

    /**
     * 删除装机拆机
     *
     * @param id 编号
     */
    void deleteDevRent(Long id);

    /**
     * 获得装机拆机
     *
     * @param id 编号
     * @return 装机拆机
     */
    DevRentDO getDevRent(Long id);

    /**
     * 获得装机拆机分页
     *
     * @param pageReqVO 分页查询
     * @return 装机拆机分页
     */
    PageResult<DevRentDO> getDevRentPage(DevRentPageReqVO pageReqVO);

    DevRentDO getInstalledOrCancelledRent(DevRentSearchReqVO searchReqVO);
    DevRentDO getFreeRent(DevRentSearchReqVO searchReqVO);
    DevRentDO getReadyOrCancelledRent(DevRentSearchReqVO searchReqVO);
    DevRentDO getDismantledRent(DevRentSearchReqVO searchReqVO);

    Integer feeConfirm(Long rentId, String hisId, String userNickname, Boolean isFeeConfirmOrCancel);
}